/**
 * 
 */
package logica.fachadas;

import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.ArrayList;

import logica.colecciones.Jugadores;
import logica.colecciones.Observadores;
import logica.datatypes.Jugador.DataJugador_R1;
import logica.datatypes.Jugador.DataJugador_R5;
import logica.datatypes.Partida.DataPartida_R1;
import logica.datatypes.Partida.DataPartida_R16;
import logica.datatypes.Partida.DataPartida_R4;
import logica.excepciones.JugadoresException;
import logica.excepciones.PartidaException;
import persistencia.PersistenciaException;
import persistencia.Archivo;
/**
 * @author pity
 *
 */
public interface IFachadaModerador extends Remote {
	
	public void crearNuevaPartida(DataPartida_R1 dataPartida_R1) throws RemoteException, PartidaException, JugadoresException  ;
	
	public void cargarMapa()throws RemoteException, PartidaException, PersistenciaException;
	
	public void iniciarPartida(String codigo)throws RemoteException, PartidaException, PersistenciaException;
	
	public DataPartida_R4[] listarCodPartidas() throws RemoteException;
	
	public DataJugador_R5[] listarNomJugadores(String codigo) throws RemoteException, PartidaException;
	                                     
	public void detenerPartida(String codigo) throws RemoteException, PartidaException;
	
	public void reanudarPartida(String codigo) throws RemoteException, PartidaException;
	
	public void reanudarSistema() throws RemoteException, PersistenciaException;
	
	public void guardarCambios() throws RemoteException, PersistenciaException;
	
	public void iniciarTurno(String codigo) throws RemoteException, PartidaException;

	public boolean hayPartidaEnCurso()throws RemoteException;
	
	public DataPartida_R4 codigoPartidaEnCurso() throws RemoteException;
	
	public boolean hayJugadorEnTurnoEnPEnCurso() throws RemoteException;
	
	public boolean hayJugadorLogeado() throws RemoteException;

	public boolean hayPartidaNoEnCurso()throws RemoteException;
	
	public boolean hayPartidaNoInicializadas()throws RemoteException;
	
	public DataPartida_R4[] listarPartidasNoInicializadas() throws RemoteException;
	
	public DataPartida_R4[] listarPartidasNoEnCurso() throws RemoteException;
	
	public DataPartida_R16 listarPartida(String codigo) throws RemoteException;
	
	public boolean noHayPartidas()throws RemoteException;
	public boolean hayGanador() throws RemoteException;
	
	public Observadores getObservadores()throws RemoteException;
	public void setObservadores(Observadores observadores)throws RemoteException;
	public void agregarObservador(IObserver cliente) throws RemoteException;
	public void notificar() throws RemoteException;
	public int cantObs() throws RemoteException;
	public String getMensajeModerador() throws RemoteException;
}
